基于RDD的特征的提取和转化的API

您所在的位置:网站首页 rdd dataframe dataset 基于RDD的特征的提取和转化的API

基于RDD的特征的提取和转化的API

#基于RDD的特征的提取和转化的API| 来源: 网络整理| 查看: 265

TF-IDF

TF-IDF的算法步骤:

TF(词频)=\(\farc{某个词在该文章出现的次数}{该文章的总词数}\)IDF(逆文档频率)=\(log(\frac{语料库的文档总数}{包含该词的文档数+1})\),分母加1是为了不让等于0.TF-IDF=TF*IDF 可以看出计算出的每个词的TF-IDF值表示的是这个词其实本质上就是体现了这篇文章中比较有意义的词。 当然TF-IDF存在一个大前提就是一篇文章的核心词出现的次数是很多的。如果,一篇文章的核心词出现的次数很小,那么TF-IDF就失效了。package com.IT_IDFTest import org.apache.spark.mllib.feature.{HashingTF, IDF, IDFModel} import org.apache.spark.mllib.linalg import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object Main { def main(args: Array[String]): Unit = { //TODO 创建环境 val conf: SparkConf = new SparkConf().setAppName("test").setMaster("local[*]") val sc = new SparkContext(conf) //TODO 数据操作 val path = "src/main/resources/data/mllib/docment.txt" val data: RDD[Seq[String]] = sc.textFile(path).map(_.split(' ').toSeq) val hashingTF = new HashingTF() //计算出词频 val tf: RDD[linalg.Vector] = hashingTF.transform(data) //因为需要使用两次TF值,所以可以cache一下(可选) tf.cache() //计算逆文档频率 val idf: IDFModel = new IDF().fit(tf) //计算TF-IDF值 val tfidf: RDD[linalg.Vector] = idf.transform(tf) tfidf.foreach(r=>{ val array: Array[Double] = r.toArray array.foreach(r=>{ if(r>0.0){print(r+" ")} }) println("--------------") }) //TODO 关闭环境 sc.stop() } }word2vec

推荐一篇博客,该博客有详细的推导过程 word2vec计算单词的分布式向量表示。分布式表示的主要优点是相似的词在向量空间中是接近的,这使得对新模式的概括更容易,模型估计更稳健。分布式向量表示在许多自然语言处理的应用中是有用的,如命名实体识别、消歧义、解析、标记和机器翻译。 下面的例子表示了如何加载文本文件,然后构建一个word2vec实例,然后输入数据拟合出一个word2vecmodel。最后,我们显示出指定单词的前40个同义词。

package com.word2vectest import org.apache.spark.mllib.feature.{Word2Vec, Word2VecModel} import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object Main { def main(args: Array[String]): Unit = { //TODO 创建环境 val conf: SparkConf = new SparkConf().setAppName("test").setMaster("local[*]") val sc = new SparkContext(conf) //TODO 数据操作 val path = "src/main/resources/data/mllib/sample_lda_data.txt" val data: RDD[Seq[String]] = sc.textFile(path).map(line => line.split(" ").toSeq) val word2vec = new Word2Vec() val model: Word2VecModel = word2vec.fit(data) val synonym: Array[(String, Double)] = model.findSynonyms("1", 5) for((a, b)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3